package com.gjt.stream;

import java.io.*;
import java.nio.file.Files;
import java.nio.file.Paths;

/**
 * Created with Intel IDEA.
 *
 * 过滤器流:
 * FileInputStream
 *
 *
 * @Auther: gjt
 * @Date: 2024/3/19 19:08
 */
public class FilterStream {

    private static byte[] read() throws IOException {
        InputStream in = Files.newInputStream(Paths.get("D:\\Idea\\项目\\myboot\\socket\\src\\main\\resources\\hello.txt"));
        byte[] bytes = new byte[in.available()];
        // 将in连接到BufferedInputStream
        BufferedInputStream bin = new BufferedInputStream(in);

        // 如果混合调用同一个源的不同流，可能会违反过滤器流的一些隐含约定；大多数情况下只使用最后一个过滤器流进行实际的读写操做
        // 可以有意的重写底层流的引用:可以这样原因是 BufferedInputStream可以多态的用作InputStream 的实列
        in = bin;
        int len = in.read(bytes);
        System.out.println("读取"+len+"字节");

        // 如果必须使用超类中没有声明的过滤器流的其他方法，可以直接在流中构建另一个流
//        DataOutputStream dataOutputStream = new DataOutputStream(new BufferedOutputStream(new FileOutputStream("hello.txt")));
//        dataOutputStream.write(90);
//        dataOutputStream.flush();
        return bytes;
    }


    public static void main(String[] args) throws IOException {
        byte[] read = read();
        System.out.println(new String(read));
    }
}
